fun hello() {
    return println("hellow word")
}

fun sum(x: Int, y: Int): Int {
    return x + y
}

//命名参数
fun printMessage(message: String, prefix: String) {
    println("[$prefix]$message")
}

//默认参数值
fun print(a: String, b: String = "info") {
    println("$a$b")
}

//无返回值函数
fun noreturn(): Unit {
    println("noreturn")
}
//单表达式函数
//fun sum(x: Int, y: Int) = x + y


fun main() {
    hello()
    println(sum(1, 2))
    //使用命名参数可以不按顺序
    printMessage(prefix = "a", message = "b")
    //默认参数
    print("aa")
    print("aa", "bb")
    //Lambda表达式
    println({ string: String -> string.uppercase() }("hello"))
    //将 lambda 分配给一个变量，然后您可以稍后调用该变量
    val a = { println("a") }
    a()
    // 将 lambda 表达式作为参数传递给另一个函数
    val numbers = listOf(1, -2, 3, -4, 5, -6)
    val positives = numbers.filter { x -> x > 0 }
    val negatives = numbers.filter { x -> x < 0 }
    println(positives)
    // [1, 3, 5]
    println(negatives)
    // [-2, -4, -6]
    //从函数返回 lambda 表达式
    //函数类型
    val upperCaseString: (String) -> String = { string -> string.uppercase() }
    fun aa(): (String) -> String {
        return upperCaseString
    }
    //单独调用 Lambda 表达式
    println({ string: String -> string.uppercase() }("hello"))
    println(listOf(1, 2, 3).fold(0, { x, item -> x + item })) // 6
    // Alternatively, in the form of a trailing lambda
    println(listOf(1, 2, 3).fold(0) { x, item -> x + item })  // 6
}